// 引入 express 框架，用于创建路由和处理 HTTP 请求
const express = require('express');
// 引入 multer 插件，用于处理文件上传
const multer = require('multer');
// 引入 path 模块，用于处理文件路径
const path = require('path');
// 创建一个 express 路由实例，用于定义文件上传相关的路由
const routerfile = express.Router();

/**
 * 生成指定范围内的随机整数
 * @param {number} min - 随机数的最小值（包含）
 * @param {number} max - 随机数的最大值（不包含）
 * @returns {number} - 生成的随机整数
 */
function random(min, max) {
    // 通过 Math.random() 生成 0 到 1 之间的随机小数，经过计算后取整得到指定范围内的随机整数
    return Math.floor(Math.random() * (max - min) + min);
}

// 配置 multer 的磁盘存储引擎，用于指定文件的存储位置和文件名
const storage = multer.diskStorage({
    /**
     * 定义文件的存储目录
     * @param {Object} req - HTTP 请求对象
     * @param {Object} file - 上传的文件对象
     * @param {Function} cb - 回调函数，用于指定存储目录
     */
    destination: function (req, file, cb) {
        // 调用回调函数，将文件的存储目录设置为当前文件所在目录的上一级的 data/photo 目录
        cb(null, path.join(__dirname, '../data/photo'))
    },
    /**
     * 定义文件的保存名称
     * @param {Object} req - HTTP 请求对象
     * @param {Object} file - 上传的文件对象
     * @param {Function} cb - 回调函数，用于指定文件名
     */
    filename: function (req, file, cb) {
        // 从原始文件名中提取文件扩展名
        let type = file.originalname.replace(/.+\./, '.');
        // 调用回调函数，将文件名设置为当前时间戳加上一个 1 到 100 之间的随机数，再加上文件扩展名
        cb(null, Date.now() + random(1, 100) + type) 
    }
})
// 使用配置好的存储引擎创建 multer 实例
const upload = multer({ storage: storage })

// 定义一个 POST 请求的路由，用于处理文件上传
routerfile.post('/profile', upload.single('file'), function (req, res) { 
    // 从请求对象中获取上传的文件名
    let name = req.file.filename; 
    // 拼接文件的访问路径
    let imgurl = '/photo/' + name;
    // 将文件的访问路径作为响应返回给客户端
    res.send(imgurl);
})

// 导出路由实例，供其他模块使用
module.exports = routerfile;